package com.example.modules.common.config.service;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * redis缓存操作Service
 * 
 * @author zbq
 * @date 2018-06-08 15:09:18
 * @version 1.0
 */
public interface RedisService {
	/**
	 * 添加缓存到redis
	 * 
	 * @param key
	 *            键
	 * @param obj
	 *            值
	 */
	public void set(String key, Object obj);

	/**
	 * 添加缓存到redis
	 * 
	 * @param key
	 *            键
	 * @param obj
	 *            值
	 * @param timeout
	 *            超期时间
	 * @param timeUnit
	 *            时间单位
	 */
	public void set(String key, Object obj, Long timeout, TimeUnit timeUnit);

	/**
	 * 删除缓存数据
	 * 
	 * @param key
	 *            键
	 */
	public void delete(String key);

	/**
	 * 删除缓存数据
	 * 
	 * @param key
	 *            键
	 */
	public void delete(List<String> key);

	/**
	 * 获取缓存对象
	 * 
	 * @param key
	 *            键
	 * @param clazz
	 *            返回类型
	 * @return T
	 */
	public <T> T get(String key, Class<T> clazz);

	/**
	 * 获取缓存对象
	 * 
	 * @param key
	 *            键
	 * @param clazz
	 *            返回类型
	 * @param start
	 *            开始位置,适用于返回类型为String
	 * @param end
	 *            结束位置,适用于返回类型为String
	 * @return T
	 */
	public <T> T get(String key, Class<T> clazz, Long start, Long end);

	/**
	 * 获取缓存对象List<clazz>列表
	 * 
	 * @param key
	 *            键
	 * @param clazz
	 *            返回类型
	 * @return List<T>
	 */
	public <T> List<T> getList(String key, Class<T> clazz);

	/**
	 * 获取缓存对象List<clazz>列表
	 * 
	 * @param key
	 *            键
	 * @param clazz
	 *            返回类型
	 * @param start
	 *            开始位置,适用于返回类型为String
	 * @param end
	 *            结束位置,适用于返回类型为String
	 * @return List<T>
	 */
	public <T> List<T> getList(String key, Class<T> clazz, Long start, Long end);
}
